<?php

/**
 * 数据库抽象类，具体数据库需要继承这个，并实现DML标准方法
 * 调用唯一实例 $instance = DB::getInstance($settings);
 *
 * @author heshun
 */
class DB {

    // 当然要允许不同协议的实例
    static protected $instance = array();
    
    abstract function connect();
    abstract function getOne();
    abstract function getCol();
    abstract function getRow();
    abstract function getAll();
    abstract function query();
    abstract function close();

    // 可以继承Object类，但还得派生
    static public getInstance($settings)
    {
        $set = @parse_url($settings);
        if (self::$instance[$set['scheme']] === NULL)
        {
            require_once "{$GLOBALS['PROJECT_CONFIG']['cache']}.class.php";
            $className = 'APF_' . $set['scheme'];
            self::$instance[$set['scheme']] = new $className($settings);
        }

        if (self::$instance[$set['scheme']]->settings !== $settings)
        {
            self::$instance[$set['scheme']]->close();
            self::$instance[$set['scheme']]->parseSettings($settings);
        }

        return self::$instance[$set['scheme']];
    }
}
?>
